In OO languages static typing provides way better performance than dynamic typing, and won't go away any time soon solely for that reason. All other arguments are bullshit.
In procedural languages static typing is usually shitty and gets in the way more than it helps. The reason there's no standard container library in C is that you'd have to typecast shit all the time like you did in java (but without the run-time checking), effectively rendering the type system useless. Typeless languages like Forth are clearly superior for "medium-level" programmimg.
In functional languages, I don't know if static typing in general is the way to go, but I do know that Haskell's type system allows you to do some very neat tricks while pretty much ensuring your will run correctly (with no unforeseen errors, that is).