...glorifying the correspondence principle, which Smalltalk and Lisp had before Ruby...
But Lisp doesn't need two different kinds of lambda (at least neither Common Lisp nor Scheme has anything like that).
Your example does not make much sense, because you can return-from foo in lambda, without enclosing it in a block.
The solution proposed by OP (distinguishing "lambda" callables from "block" callables) is in my opinion misguided, because it only solves a problem partially, in a confusing way and creates new, unnecessary entities. The return-from mechanism is simpler and more intuitive.