docs: function(name, definition, options) {
          var directionDict = {};
          for (var k in definition) {
              var direction = definition[k];
              var keyCode = Crafty.keys[k] || k;
  
              // create a mapping of directions to all associated keycodes
              if (!directionDict[direction]) {
                  directionDict[direction] = [];
              }
              directionDict[direction].push(new KeyboardToggleInput(keyCode));
          }
  
          // Create a useful definition from the input format that tracks state
          var parsedDefinition = {};
          for (var d in directionDict) {
              parsedDefinition[d] = {
                  input: new ToggleInputGroup(directionDict[d]),
                  active: false,
                  n: this.parseDirection(d)
              };
          }
          if (typeof options === "undefined") {
              options = {};
          }
          if (typeof options.normalize === "undefined") {
              options.normalize = false;
          }
          if (typeof options.multipleDirectionBehavior === "undefined") {
              options.multipleDirectionBehavior = "all";
          }
          // Create the fully realized dpad object
          // Store the name/definition pair
          this.destroyDpad(name);
          this._dpads[name] = {
              name: name,
              directions: parsedDefinition,
              x: 0,
              y: 0,
              oldX: 0,
              oldY: 0,
              event: { x: 0, y: 0, name: name },
              normalize: options.normalize,
              multipleDirectionBehavior: options.multipleDirectionBehavior
          };
  
          Crafty.trigger("ControlDefined", { type: "Dpad", name: name });
      }