Honestly, the solution is to wait for ES6 'let' scope - CoffeeScript's scope issues exist because it is, by intentional design, similar to JavaScript, and JS has scope issues.
When ES6 is a viable option, CoffeeScript can incorporate lexical scope in a backwards compatible way, and its scoping will become much less unexpected.