Based on this post, I realized that the grid columns config can be defined as a Ext.grid.header.Container or xtype:'headercontainer'. This was helpful in order to apply defaults to all columns.

However, this variation in column configuration broke the rowexpander plugin on line 101 in the constructor
Code:
grid.columns.unshift(this.getHeaderConfig());
because columns was no longer an array. Changes are highlighted in red:

Code:
    constructor: function() {
        this.callParent(arguments);
        var grid = this.getCmp(),
             columns = grid.columns;

...


        if (columns instanceof Ext.grid.header.Container){
            columns = columns.items.items;
        } else {
            if (Ext.isObject(columns)){
                columns = columns.items;
            } 
        }  
        columns.unshift(this.getHeaderConfig());
        grid.on('afterlayout', this.onGridAfterLayout, this, {single: true});
    }//eof constructor