I should have been clearer about this relating to HTTP RPC. I updated the post.
That said, after reading the responses here, I can see that what I've actually achieved is making the response harder to determine for the client, which is antithetical to the objective.
After knocking it around in my head, I concede I am wrong :) HTTP is, after all, an Application layer protocol.
Whilst I remain unconvinced by some of the arguments, that one that got through to me was mostly about the reasoning behind using an application layer protocol in the first place: standards. And this breaks the crap out of those standards.
The correct answer is probably closer to a combination of status codes and a _clear_ response message (as well as the correct Content-Type header!)
An empty 404 is ambiguous, which is surprising to nobody :) fair points all round