docs: function(options){
          var ex, xmla = this;
  
          this.response = null;
          this.responseText = null;
          this.responseXML = null;
  
          options = _applyProps(options, this.options, false);
          if (!options.url){
              ex = Xmla.Exception._newError(
                  "MISSING_URL",
                  "Xmla.request",
                  options
              );
              ex._throw();
          }
          options.properties = _applyProps(options.properties, this.options.properties, false);
          options.restrictions = _applyProps(options.restrictions, this.options.restrictions, false);
          delete options.exception;
  
          if (
            !this._fireEvent(Xmla.EVENT_REQUEST, options, true) ||
            (options.method == Xmla.METHOD_DISCOVER && !this._fireEvent(Xmla.EVENT_DISCOVER, options)) ||
            (options.method == Xmla.METHOD_EXECUTE  && !this._fireEvent(Xmla.EVENT_EXECUTE,  options))
          ){
            return false;
          }
  
          var soapMessage = this.getXmlaSoapMessage(options);
          this.soapMessage = soapMessage;
          var myXhr;
          var ajaxOptions = {
              async: options.async,
              timeout: options.requestTimeout,
              data: soapMessage,
              error:      function(exception){
                              options.exception = exception;
                              xmla._requestError(options, exception);
                          },
              complete:   function(xhr){
                              options.xhr = xhr;
                              xmla._requestSuccess(options);
                          },
              url: options.url
          };
          if (options.username) {
            ajaxOptions.username = options.username;
          }
          if (options.password) {
            ajaxOptions.password = options.password;
          }
          
          var headers = {};
          if (this.options.headers) {
            headers = _applyProps(headers, this.options.headers);
          }
          if (options.headers) {
            headers = _applyProps(headers, options.headers, true);
          }
          ajaxOptions.headers = headers;
  
          myXhr = _ajax(ajaxOptions);
          return this.response;
      }