code: function(reader) {
          var me = this,
              needsCopy = true,
              current = me.reader;
  
          if (reader === undefined || typeof reader == 'string') {
              reader = {
                  type: reader
              };
              needsCopy = false;
          }
  
          if (reader.isReader) {
              reader.setModel(me.model);
          } else {
              if (needsCopy) {
                  reader = Ext.apply({}, reader);
              }
              Ext.applyIf(reader, {
                  proxy: me,
                  model: me.model,
                  type : me.defaultReaderType
              });
  
              reader = Ext.createByAlias('reader.' + reader.type, reader);
          }
  
          if (reader !== current && reader.onMetaChange) {
              reader.onMetaChange = Ext.Function.createSequence(reader.onMetaChange, this.onMetaChange, this);
          }
  
          me.reader = reader;
          return me.reader;
      }
docs: Sets the Proxy's Reader by string, config object or Reader instance
  
  @param {String/Object/Ext.data.reader.Reader} reader The new Reader, which can be either a type string,
  a configuration object or an Ext.data.reader.Reader instance
  @return {Ext.data.reader.Reader} The attached Reader object