docs: function inspect(prop, cache, clone) {
          var key,
              x,
              length,
              ret;
  
          cache = cache || {
              others: [],
              instances: [],
              constructors: []
          };
  
          if (isObject(prop)) {
              // Check if it is an instance
              if (prop.$static) {
                  return prop.$static[$class].inspectInstance ?
                      prop.$static[$class].inspectInstance(prop, cache) :
                      inspectInstance(prop, cache);
              }
  
              // Object is a collection
              // Attempt to fetch from cache
              ret = fetchCache(prop, cache.others);
              if (ret) {
                  return ret;
              }
  
              ret = {};
              cache.others.push({ target: prop, inspect: ret });
  
              // Iterate over each key value of the object, inspecting it
              for (key in prop) {
                  ret[key] = inspect(prop[key], cache, clone);
              }
  
              return ret;
          }
  
          // Array is a collection
          if (isArray(prop)) {
              // Attempt to fetch from cache
              ret = fetchCache(prop, cache.others);
              if (ret) {
                  return ret;
              }
  
              ret = [];
              cache.others.push({ target: prop, inspect: ret });
  
              // Iterate over each item of the array, inspecting it
              length = prop.length;
              for (x = 0; x < length; x += 1) {
                  ret.push(inspect(prop[x], cache, clone));
              }
  
              return ret;
          }
  
          if (isFunction(prop)) {
              // Check if is a constructor
              if (prop[$class]) {
                  return prop[$class].inspectConstructor ?
                      prop[$class].inspectConstructor(prop, cache) :
                      inspectConstructor(prop, cache);
              }
  
              // Otherwise check if it is a wrapper function or a normal one
              return prop[$wrapped] || prop;
          }
  
          return prop;
      }