It's the preferred way to exchange data between dissectors because you're a lot more sure of its scope than some of the other methods. For most cases, you're just passing the data between a dissector and it's subdissector (rarely does it go farther than that).
If TCP is passing its data to SSL and you have another dissector that needs to pass data to SSL, I recommend creating another dissector entry point for SSL for the STARTTLS-like dissector to call (and register it for the STARTTLS-like protocol to find). The "current" dissector entry point and "new" dissector entry point can have a "common" function that they both call, taking into account the data passed it. If SSL is just ignoring the TCP data (most dissectors do), the common function would take a NULL parameter in that case.
I know there are current dissectors that use this functionality, I just can't think of any off the top of my head.
-----Original Message-----
From: Peter Wu <peter@xxxxxxxxxxxxx>
To: Developer support list for Wireshark <wireshark-dev@xxxxxxxxxxxxx>
Sent: Fri, Jan 30, 2015 6:09 pm
Subject: [Wireshark-dev] What is the data parameter of call_dissector_with_data?