I have an override for Ext.grid.Panel that adds a generic emptyText message for all grids. I have noticed that for grids with bound stores, the emptyText isn't deferred when the store is loading (or even before it's loaded). If the store isn't bound, it defers the emptyText. Please see this Fiddle and code:

Code:
Ext.application({
    name : 'Fiddle',

    launch : function() {
        Ext.override(Ext.grid.Panel, {
            emptyText: 'There were no records returned'
        });
        Ext.define('NoProxy', {
            extend: 'Ext.data.Model',
            fields: ['name']
        });
        Ext.define('MyViewModel', {
            extend: 'Ext.app.ViewModel',
            alias: 'viewmodel.myview',
            stores: {
                myStore: {
                    model: 'NoProxy',
                    proxy: {
                        type: 'ajax',
                        url: 'data2.json'
                    }
                }
            }
        });
        Ext.define('MyViewController', {
            extend: 'Ext.app.ViewController',
            alias: 'controller.myview',
            init: function() {
                var me = this;
                setTimeout(function() {
                    me.getStore('myStore').load();
                }, 1000);
            }
        });
        Ext.define('MyView', {
            extend: 'Ext.grid.Panel',
            renderTo: Ext.getBody(),
            height: 400,
            width: 400,
            controller: 'myview',
            viewModel: {
                type: 'myview'
            },
            title: '(WRONG) Shows Empty Text',
            columns: [
                {text: 'Name', dataIndex: 'name'}
            ],
            bind: {
                store: '{myStore}'
            }
        });
        var myStore = Ext.create('Ext.data.Store', {
            model: 'NoProxy',
            proxy: {
                type: 'ajax',
                url: 'data2.json'
            }
        });
        Ext.define('MyViewController2', {
            extend: 'Ext.app.ViewController',
            alias: 'controller.myview2',
            init: function() {
                var me = this;
                setTimeout(function() {
                    myStore.load();
                }, 1000);
            }
        });
        Ext.define('MyView2', {
            extend: 'Ext.grid.Panel',
            renderTo: Ext.getBody(),
            height: 400,
            width: 400,
            controller: 'myview2',
            viewModel: {
                type: 'myview'
            },
            title: '(RIGHT) Waits for Empty Text',
            columns: [
                {text: 'Name', dataIndex: 'name'}
            ],
            store: myStore
        });
        Ext.create('MyView');
        Ext.create('MyView2');
    }
});
I believe this bug might be associated with this bug.