I think that the RPC result structure (i.e. the potentially nested JSON types) should not depend on the return value, as this makes the deserialization from json to a language-specific struct harder.
For example, gettransaction has a key "generated", that can never be false. It either exists (and is true) or does not exists (and is implicitly false).
generated (and other fields in gettransaction) should be changed to always return the value.