Exactly, with caching the application server becomes far less of an issue. There's a catch, though.
Twitter, is a live service, content is constantly changing, which means round-trip to app server required, and that is where dynamic languages suffer, under load.
re: "I can assure you that espn.go.com could easily be served with ruby instead of java.", perhaps, but like Twitter, they chose the JVM and not the Ruby runtime. That's the "big site" de facto choice, compilation over runtime, whether it be .NET, JVM, or, perhaps in future for the enterprise, functional a la Haskell, Erlang, etc.
re: the best backend being the cheapest, depends on what you mean, hardware is not everything, the application has to be developed and maintained, bandwidth accounted for, etc. But yes, I can roll with that, minimal hardware expense to get the job done. Now, if you're implying that compiled languages are more expensive than their dynamic language counterparts, not sure if that is necessarily the case.
I run a couple of Dell R610 ESXi servers in colo, small setup, but complete overkill for actual load we're handling. At any rate, Scalatra (Scala Sinatra clone) running on Jetty "costs" 38MB of RAM per instance, not exactly expensive.