as far as I know that last example you posted is the proper (and probably the only) way to do it.
Its a technical thing about the Isolator not being to distinguish between the call you want to fake (a.Method()) and the call to the property.
IIRC in most cases it would output an error when you do that, and i would expect it to do the same here. and not mess the property behavior itself.
:?: regarding the complexity, given that that isolator completely ignores arguments passed into a faked method, what was your intention when passing it the a.X value? you could just as well pass it a 0. (making your test a little simpler)