The current structure of the SignalService makes it very easy to do L1<->L2 communication, and has most of the components to do L2<->L2 communication as well. The only piece missing is a trusted state root of chainA on chainB. This can be built as an “application” concern.
But perhaps we can provide a contract that allows to store the commitment of chainA on chainB and does a trustless validation also using storage proofs and the L1 state root