That just means there should be function in your "universe" project that does this work, and your message handlers in your leaf nodes would be just one-liners.
Write a module. Modules can declare any desired RPC they like.
Edit September 2025:
I suppose this is the right place to mention that my Integration Toolkit's @system.util.runInGateway
decorator basically achieves this goal. You simply annotate the library function and any calls from client/designer scope will silently marshal the arguments and unmarshal the return value.