code: function(serverID, processID, callback, scope) {
          var server = this.servers[serverID];
          if (!server.processDescription[processID]) {
              if (!(processID in server.processDescription)) {
                  // set to null so we know a describeFeature request is pending
                  server.processDescription[processID] = null;
                  OpenLayers.Request.GET({
                      url: server.url,
                      params: {
                          SERVICE: 'WPS',
                          VERSION: server.version,
                          REQUEST: 'DescribeProcess',
                          IDENTIFIER: processID
                      },
                      success: function(response) {
                          server.processDescription[processID] = response.responseText;
                          this.events.triggerEvent('describeprocess', {
                              identifier: processID,
                              raw: response.responseText
                          });
                      },
                      scope: this
                  });
              } else {
                  // pending request
                  this.events.register('describeprocess', this, function describe(evt) {
                      if (evt.identifier === processID) {
                          this.events.unregister('describeprocess', this, describe);
                          callback.call(scope, evt.raw);
                      }
                  });
              }
          } else {
              window.setTimeout(function() {
                  callback.call(scope, server.processDescription[processID]);
              }, 0);
          }
      }
docs: Method: describeProcess
  
  Parameters:
  serverID - {String} Identifier of the server
  processID - {String} Identifier of the requested process
  callback - {Function} Callback to call when the description is available
  scope - {Object} Optional execution scope for the callback function