docs: function (obj, type) {
              curIndex += 1;
              var a,
                  n,
                  ns,
                  action,
                  actionName,
                  count;
              //console.log('=============================='.blue);
              //console.log('current index is: ' + curIndex);
              //console.log('type is:'.yellow, type);
              if (undefined !== type) {
                  namespace.push('ns1:' + type);
              }
              //console.log('namespace depth: '.cyan, namespace.length, namespace, curIndex);
              for (n in obj) {
                  if ('SubscribeOptions' === n) {
                      action = that.simpleAction(n, obj[n]);
                      actionName = 'ns1:' + n;
                      curObj[actionName] = action[actionName];
                      continue;
                  }
                  if (!obj.hasOwnProperty(n) || null === obj[n]) {
                      //console.log('skipping: ' + n);
                      continue;
                  }
                  if (undefined !== zuora.models[n] && 'SubscribeOptions' !== n) {
                      //console.log('checking model: '.red, n);
                      recurseObject(obj[n], n);
                      //console.log('index down: '.green, curIndex);
                      continue;
                  }
                  //console.log('adding:'.cyan, n, curIndex, count);
                  count = 0;
                  curObj = gobj;
                  while (count < curIndex) {
                      //console.log('setting current index'.yellow, namespace[count]);
                      ns = namespace[count];
                      if (undefined === curObj[ns]) {
                          //console.log(' + setting namespace:'.yellow, ns);
                          curObj[ns] = {};
                      }
                      curObj = curObj[ns];
                      count += 1;
                  }
                  //console.log('setting currentObject: '.red, n);
                  ns = 'ns1:' + n;
                  curObj[ns] = that.createSubscribeObject(n);
                  for (a in obj[n]) {
                      if (obj[n].hasOwnProperty(a)) {
                          curObj[ns]['ns2:' + a] = obj[n][a];
                      }
                  }
              }
              curIndex -= 1;
              if (curIndex === -1) {
                  //console.log('returning gobj');
                  return gobj;
              }
          }