 
	
You can (sort of) get Object and Array by not defining a type on model field definitions but explicit types would be better to be enforced. Also grids could ignore these types unless a custom editor is provided. There is also a need for fields that reference submodels and arrays of submodels. HierarchicalDataSources do not really fit the requirement. See how mongoose (for mongoDB) handles documents and subdocuments.
 
	
var Item = kendo.data.Model.define({
    fields: {
        title: {
            type: 'string'
        },
        attributes: {
            defaultValue: {}
        }
    }
});
var Attributes = kendo.data.Model.define({
    fields: {
        src: {
            type: 'string'
        },
        alt: {
            type: 'string'
        },
        style: {
            type: 'string'
        }
    }
});
describe('Test complex kendo.data.Model', function() {
    it('Test instances through aggregations', function() {
        var attributes = new Attributes({alt: 'Google', src: 'http://www.google.com/logo.jpg', style: 'height: 100px; width: 100px;'}),
            item = new Item({title:'sample image', attribute: attributes}),
            viewModel = kendo.observable({ item: item });
        expect(viewModel.item).to.be.an.instanceof(Item);
        expect(viewModel.item).to.be.an.instanceof(kendo.data.Model);
        expect(viewModel.item.attributes).to.be.an.instanceof(Attributes);        //Fails
        expect(viewModel.item.attributes).to.be.an.instanceof(kendo.data.Model);  //Fails
    });
});
				