The problem
You are calling a service that returns XML with an XForms submission, but the service incorrectly advertises the result with a non-XML content type, such as text/plain. Even if the content type is incorrect, the body contains proper XML, which you'd like to handle as if it was returned with an XML content type, such as application/xml.
The solution
Fix the service. Now, if you really can't, what follows is a workaround. However keep in mind that this will make your code more verbose and harder to understand, so again, the right way address this is to fix the service and get it to return a proper XML content type.
When the service is called as its result doesn't have an XML content type, the submission fails with an xforms-submit-error. You can listen to that event, and use event('response-body') to access the body of the result. This will be a string containing the unparsed XML you're interested in. You can parse that string with the saxon:parse() function and use <xforms:insert> to replace the content of an instance with the parsed XML.
But what if, after all, the service really failed and doesn't return XML? In that case running saxon:parse() on non-XML text would throw an exception which would become visible to your users. So you only want to run saxon:parse() after you're sure that the returned text is indeed XML. You can do so by storing it in a node, which you validate with a <xforms:bind type="xxforms:xml"/>. You can then use xxforms:valid() to check on the validity of that node, and only do the parsing if the text is indeed XML. Here is the important part of the source, and see below for a link to a stand-alone example.