code: function asKeyArray(name, object) {
  
          // If already an array, just coerce into a true Key[] 
          if (object instanceof Array) {
              var keys = [];
              for (var i=0; i < object.length; i++) {
                  keys.push(new Guacamole.OnScreenKeyboard.Key(object[i], name));
              }
              return keys;
          }
  
          // Derive key object from keysym if that's all we have
          if (typeof object === 'number') {
              return [new Guacamole.OnScreenKeyboard.Key({
                  name   : name,
                  keysym : object
              })];
          }
  
          // Derive key object from title if that's all we have
          if (typeof object === 'string') {
              return [new Guacamole.OnScreenKeyboard.Key({
                  name  : name,
                  title : object
              })];
          }
  
          // Otherwise, assume it's already a key object, just not an array
          return [new Guacamole.OnScreenKeyboard.Key(object, name)];
  
      }
docs: Given the name of a key and its corresponding definition, which may be
  an array of keys objects, a number (keysym), a string (key title), or a
  single key object, returns an array of key objects, deriving any missing
  properties as needed, and ensuring the key name is defined.
  
  @private
  @param {String} name
  The name of the key being coerced into an array of Key objects.
  
  @param {Number|String|Guacamole.OnScreenKeyboard.Key|Guacamole.OnScreenKeyboard.Key[]} object
  The object defining the behavior of the key having the given name,
  which may be the title of the key (a string), the keysym (a number),
  a single Key object, or an array of Key objects.
  
  @returns {Guacamole.OnScreenKeyboard.Key[]}
  An array of all keys associated with the given name.