docs: function Module(name, dependencies, constructor, dynamic) {
  
      /* Normalize names to "$global/..." */
      name = globalName(name);
      for (var i in dependencies) {
        dependencies[i] =  globalName(dependencies[i]);
      }
  
      /**
       * The name of this {@link Module}
       * @member {string} Module#name
       * @readonly
       */
      Object.defineProperty(this, 'name', { enumerable: true, configurable: false, value: name });
  
      /**
       * The name of all dependencies required by this {@link Module} (in order).
       * @member {string[]} Module#dependencies
       * @readonly
       */
      Object.defineProperty(this, 'dependencies', { enumerable: true, configurable: false, value: dependencies });
  
      /**
       * The constructor function creating instances of this {@link Module}.
       * @member {function} Module#constructor
       * @readonly
       */
      Object.defineProperty(this, 'constructor', { enumerable: true, configurable: false, value: constructor });
  
      /* Hidden $$script for injection and $$dynamic flag */
      Object.defineProperty(this, "$$dynamic", { enumerable: false, configurable: false, value: dynamic || false });
      Object.defineProperty(this, '$$script',  { enumerable: false, configurable: false, get: function() {
        return 'Esquire.define(' + JSON.stringify(this.name)
                           + ',' + JSON.stringify(this.dependencies)
                           + ',' + constructor.toString() + ');'
      }});
  
      /* Freeze ourselves */
      Object.freeze(this);
  
    }