If I remember correctly we did discuss the other way (from CommandData to ToolData) quite a while ago (see https://developers.maxon.net/forum/topic/10044/13513_using-objectmessage). But I guess using this same technique could still be applicable to your current request.
Most important is to understand that a CoreMessage is not captured by a ToolData. This type of message can only be captured by a MessageData plugin, where you then could "translate" it into a message that actually is sent to the ToolData.
What I have been successful in using is, performing following from the "transmitter":
BasePlugin* tool = FindPlugin(TOOL_PLUGIN_ID, PLUGINTYPE::TOOL);
if (tool)
tool->Message(TOOL_MSG_PREPAREDATA);
Where TOOL_PLUGIN_ID is the plugin ID of the ToolData, and TOOL_MSG_PREPAREDATA is a custom defined message, using a unique plugin ID.
And then using following in the "receiver" ToolData:
Bool MyToolData::Message(BaseDocument *doc, BaseContainer &data, Int32 type, void *t_data)
{
if (type == TOOL_MSG_PREPAREDATA)
{
PrepareData();
}
return DescriptionToolData::Message(doc, data, type, t_data);
}