Thanks for your reply.
In practice even that creates some challenges, in that how can I include a class from the other plugin which may or may not be present at runtime.
I was trying to figure out how the engine handles similar situations (at least I think), noting the use of DynamicallyLoadedModuleNames and PrivateIncludePathModuleNames. Then has various checks to see if the module is loaded, if not load it. I havent been able to get my head around that yet to determine if that could work, and failed in my own attempts so far.
The overall goal is not so similar to this other thread, except I want a component in one plugin to have functionality available based on whether the other plugin is available (purchased):
Another line of thought, would be to move that common component to a 3rd Core plugin, plugin A is free to depend on it, plugin B can also depend on it as well.
Any further thoughts would be appreciated.