If all you want to do is a message format then you could use the template() option for the tcp destination, like this:
destination d_tcp { tcp("server" port(whatever) template("040404040400010$MESSAGE"));
you can even embed hex characters in the template string using the \xFF escapes. If you want to do a more involved thing, then you probably need a LogProtoClient implementation, that you can now plug into the network() destination as a transport. The network destination was introduced in 3.4, but 3.5 has seen another largish refactoring change in this code.
Creating a LogProtoClient implementation should be straightforward, you need to create a new "class" from LogProtoClient, override its post() function. The post method should do everything to submit a message for sending. If you need duplex communication (e.g. not just one-way tcp like the "standard" tcp based syslog), you'll probably need to override prepare() to return which I/O masks you are interested in.
Once you have a working LogProtoClient, you can create a plugin from it and reference it from the transport() option of the network driver, e.g.