You'd probably want to start by altering the lexer to stop considering ...
a
.b
.c
.d
... as effectively a single line, and turn it into some sort of "chain" node. Then, the value of the expression "a" can be cached at the beginning, and all further operations in the chain can be performed against the original value.
Do you think it would be hard to introduce such feature to CoffeScript on your own?