The protocol documentation is non existant (AFAIK), and basically the only standard is the rsync program itself. The protocol is strange, and there are some quirks, so it is not trivial to replicate or write custom clients.
This is why it is hard to implement an rsync program that can talk to the standard rsync program, but it is not that hard to implement your own client and server which use a custom protocol that implements an rsync-like algorithm.