It is simple to convert an asynchronous message flow to a synchronous one by setting the synchronous property of the endpoint to true. All flows from that endpoint onwards will be synchronous.
In order to convert a synchronous message flow into an asynchronous one, you need to either use remote-sync (imposing the overhead of keeping the event context around) or use a wiretap inbound router and wire tap the message to your asynchronous endpoint. Your original message flow remains as-is so this is not really a conversion of sync to async.
This is a funky solution to a simple problem. IMHO, Mule should support this pattern more explicitly, perhaps by just allowing to set the sync property of an endpoint to false and doing the right thing. Example of an API that can achieve this: the endpoint's synchronous property can be a java.lang.Boolean with three possible values: true - force synchronous from now on; false - force asynchronous; null - use whatever is the current mode (get it from the event).
The responses would be propagated by the remote-sync / sync endpoints and will be dropped if they reach async endpoint (a DEBUG or INFO log message would be good.)