I evaluated using JSON however decided against it because it is non-recursive. You do have the option though of trimming parts of the object graph that is returned by specifying the exclude attribute of the @WebRemote annotation.
I have usually found it easier to create a separate class for returning resultsets since there is most of the time a lot to strip out. Even so the verbosity and inclusion of metadata in the response really increases the response size.
We had a case where we had a large set of data being requested and the remoting response ended up to be 500k and the loading time was not acceptable. As a result we were required to create a custom solution.