docs: function Block(options) {
          if ('object' !== typeof options) {
              throw new TypeError('Block constructor: options must be object: ' +
                                  options);
          }
  
          if ('string' !== typeof options.type || options.type.trim() === '') {
              throw new TypeError('Block constructor: options.type must ' +
                                  'be a non-empty string: ' + options.type);
          }
  
          if ('string' !== typeof options.id || options.id.trim() === '') {
              throw new TypeError('Block constructor: options.id must ' +
                                  'be a non-empty string: ' + options.id);
          }
  
          // ### Properties
  
          /**
           * #### Block.type
           *
           * Stage or Step block
           */
          this.type = options.type;
  
          /**
           * #### Block.id
           *
           * An identifier (name) for the block instance
           */
          this.id = options.id;
  
          /**
           * #### Block.positions
           *
           * Positions in the enclosing Block that this block can occupy
           */
          this.positions = 'undefined' !== typeof options.positions ?
              options.positions : 'linear';
  
          /**
           * #### Block.takenPositions
           *
           * Positions within this Block that this are occupied
           */
          this.takenPositions = [];
  
          /**
           * #### Block.items
           *
           * The sequence of items within this Block
           */
          this.items = [];
  
          /**
           * #### Block.itemsIds
           *
           * List of the items added to the block so far
           */
          this.itemsIds = {};
  
          /**
           * #### Block.unfinishedItems
           *
           * Items that have not been assigned a position in this block
           */
          this.unfinishedItems = [];
  
           /**
           * #### Block.index
           *
           * Index of the current element to be returned by Block.next
           *
           * @see Block.next
           */
          this.index = 0;
  
          /**
           * #### Block.finalized
           *
           * Flag to indicate whether a block is completed
           */
          this.finalized = false;
  
          /**
           * #### Block.resetCache
           *
           * Cache object to reset Block after finalization
           */
          this.resetCache = null;
  
      }