docs: function randomFire(method, hook, maxWait, emit, ctx, args) {
          var that;
          var waitTime;
          var callback;
          var timerObj;
          var tentativeName;
  
          that = this;
  
          if ('undefined' === typeof maxWait) {
              maxWait = 6000;
          }
          else if ('number' !== typeof maxWait) {
              throw new TypeError('Timer.' + method + ': maxWait must ' +
                                  'be number or undefined. Found: ' + maxWait);
          }
  
          waitTime = Math.random() * maxWait;
  
          // Timeup callback: Emit.
          if (emit) {
              callback = function() {
                  that.destroyTimer(timerObj);
                  if (args) {
                      that.node.emit.apply(that.node.events, [hook].concat(args));
                  }
                  else {
                      that.node.emit(hook);
                  }
              };
          }
          // Timeup callback: Exec.
          else {
              callback = function() {
                  that.destroyTimer(timerObj);
                  hook.apply(ctx, args);
              };
          }
  
          tentativeName = method + '_' + hook + '_' + J.randomInt(0, 1000000);
  
          // Create and run timer:
          timerObj = this.createTimer({
              milliseconds: waitTime,
              timeup: callback,
              name: J.uniqueKey(this.timers, tentativeName)
          });
  
          // TODO: check if this condition is ok.
          if (this.node.game && this.node.game.isReady()) {
              timerObj.start();
          }
          else {
              // TODO: this is not enough. Does not cover all use cases.
              this.node.once('PLAYING', function() {
                  timerObj.start();
              });
          }
      }