Using smack, we have developed a way to do remote method invocation, which means that instead of using jabber (XMPP) as a IM protocol, we use it as a general usage communication protocol for distributed applications.
The concept is similar to Jabber-RPC (XML-RPC over jabber) and Jabber-SOAP, but we use ObjectOutputStream and ObjectInputStream for serialization / deserialization which allows for any serializable object to be passed as arguments or return value with very little overhead for the developers. The disadvantage is of course that it reduces interop. with non-java parties.
Since jabber works very well behind firewall and NAT routers, this allows both the server and the client to be behind firewalls which was one of the reason we chose Jabber.
We are willing to release the project under the Apache license if there is some interest in it.