If it's expected that the resource exists, but it might be empty, I would argue that it might be easier to just get a 200 OK with a representation that indicates that the thing is empty.
So I'd rather have /things return a 200 OK with {"Items": []} than a 204 with nothing at all, because in this way a collection with 0 items can be treated just the same as a collection with one or more item in it.
I'd just leave the 204 No Content for PUTs and DELETEs, where it might be the case that there really is no useful representation.
In the case that /thing/9 really doesn't exist, a 404 is appropriate.