Котяра, на мой взгляд тоже: с двумя интерфейсами - перебор. Вот можно сделать так (через нэймспейсы):
Model.as

Код AS3:
package
{
public class Model
{
public function Model()
{
super();
}
protected namespace _nsSetter;
protected var _myProperty:String;
public function getNsSetter( controller:IController ):Namespace
{
if( !controller )
return null;
return _nsSetter;
}
public function get myProperty():String
{
trace( "get myProperty" );
return _myProperty;
}
_nsSetter function set myProperty( val:String ):void
{
trace( "set myProperty" );
if( val == _myProperty )
return;
_myProperty = val;
}
}
}
А в контроллере, для примера, что-то вроде:

Код AS3:
var m:Model = new Model();
var nsSetter:Namespace = m.getNsSetter(this);
m.myProperty; // read
m.nsSetter::myProperty = "lalala"; // write
В getNsSetter( controller:IController ) - IController для примера. Можно и не для контроллера сделать.
Или вообще переменной _myProperty назначить не protected, а сразу _nsSetter нэймспейс. А сеттер myProperty и вовсе убрать. Тогда в контроллере нужно будет работать через неймспейс с переменной, а в остальных классах - только с геттером.