You can use this method to correct the SOAP request before sending it, if necessary. You can use the DOM API to accomplish that. 
<?php
public ExtendedClient extends SoapClient {
   function __construct($wsdl, $options = null) {
      parent::__construct($wsdl, $options);
   }
   function __doRequest($request, $location, $action, $version) {
      $dom = new DOMDocument('1.0');
      try {
         //loads the SOAP request to the Document
         $dom->loadXML($request);
      } catch (DOMException $e) {
         die('Parse error with code ' . $e->code);
      }
      //create a XPath object to query the request
      $path = new DOMXPath($dom);
      //search for a node
      $nodesToFix = $path->query('//SOAP-ENV:Envelope/SOAP-ENV:Body/path/to/node');
      //check if nodes are ok
      $this->checkNodes($path, $nodesToFix);
      //save the modified SOAP request
      $request = $dom->saveXML();
      
      //doRequest
      return parent::__doRequest($request, $location, $action, $version);
   }
   function checkNodes(DOMXPath $path, DOMNodeList $nodes) {
      //iterate through the node list
      for ($i = 0; $ < $nodes->length; $i++) {
         $aNode = $nodes->item($i);
         //just an example
         if ($node->nodeValue == null) { 
            //do something. For instance, let's remove it.
            $node->parentNode->removeChild($node);
         }
      }
   }
}
?>
This gives the developer the chance to solve interoperability problems with a web service.