docs: function Namespace(/*[Member]*/) {
      if (arguments.length > 0) {
          var config = {}, cfx = arguments[0];
          if (cfx != null && cfx != undefined) { // Check if not null or undefined
              // Extract the configurations for create the namespace if ir doesn't exist.
              if (isString(cfx)) {
                  config['$name'] = cfx;
              } else if (isObject(cfx)) {
                  config = cfx;
              } else throw new System.exception.InvalidTypeException("The first argument must be either a [String/Object], but " + getClassName(cfx) + " was supplied instead");
  
              if (!(validIdientifierRegex.test(config.$name)))
                  throw new Exception("Invalid namespace identifier: '" + config.$name + "'", 'InvalidIdentifierException');
  
              var container = config.$container || (CONFIG.GLOBAL || $global);
  
              if (is(this, Namespace)) { // Check if is instantiation
                  if (arguments.length <= 2) {
                      container = arguments[1] || container;
  
                      var wrapper = Namespace.getLastNode(container, config.$name),
                          name = config.$name.replace(wrapper.name, "");
                      var extract = new RegExp("^.*?(" + packageRegex + ")", "gm").exec(name);
                      name = extract ? extract[1] : name;
  
                      container = wrapper.container;
  
                      if (name != "") {
                          var nsparts = name.split(".");
  
  
                          // loop through the parts and create a nested namespace if necessary
                          do {
                              name = nsparts.shift();
                              // check if the current parent already has the namespace declared
                              // if it isn't, then create it
                              if (nsparts.length == 0) break;
  
                              container = container[name] = new Namespace(name, container);
                          } while (nsparts.length > 0)
  
  
                          // Call the super for initialization
                          Member.call(this, name, container, Namespace);
  
                          /**
                           * @override
                           * @param member
                           */
                          this.addMember = function (member) {
                              return Member.register(Member.prototype.addMember.call(this, member));
                          }
  
                          return container[name] = this;
                      }
  
                      return container;
                  }
                  throw new System.exception.InvalidArgumentsException("Invalid arguments number, expected no more than 2.")
              } else {
                  var ns;
                  if (!Namespace.contains(container, config.$name)) {
                      ns = new Namespace(config.$name, container);
                  } else {
                      var node = Namespace.getLastNode(container, config.$name);
                      if (node && ("container" in node)) ns = node["container"];
                  }
  
                  if (ns) {
                      function updateContainer(member, ns) {
                          if (member && member.is(Member)) {
                              Loader.unregister(member.getFullPath());
                              var cont = member.getContainer();
                              if (cont && cont.is(Member)) cont.removeMember(member);
  
                              ns.addMember(member);
                          }
                      }
  
                      Array.prototype.slice.call(arguments, 1, arguments.length).each(function (arg) {
                          if (arg && arg.is(Member.BuilderTemp)) {
                              arg.onBuild = function (member) {
                                  updateContainer(member, ns);
                              }
                          }
                          else updateContainer(arg, ns);
                      });
                  }
                  return ns;
              }
          }
      }
      throw new System.exception.InvalidArgumentsException("The first argument must be specified");
  }