Great question. Right now you have two imperfect options:
- Build the exchange from known inputs using createrawtransaction, then pass it to each party to call signrawtransaction, instead of using createrawexchange + appendrawexchange. This will allow you to add metadata outputs in the usual way, and have all parties sign that metadata. But it means you need to know the parties to the exchange ahead of time.
- Once the exchange has been completed using createrawexchange + appendrawexchange, manually modify the transaction (using an external library which can unpack and pack the bitcoin transaction format) to add the OP_RETURN output and a new input, then sign the resulting transaction using signrawtransaction on whichever node has the private key for that new input added.
We're looking into making this easier in a future version.