When teaching kids a few years older, your world really opens up in terms of tools you can use - I think a motivated 13 year old should be able to grasp any one of a number of different programming languages and/or different paradigms.
One of the issues with teaching younger students has to do with the immediacy of results:
Something like "Scratch" has a simplified programming model (visual drag-and-drop programming to create interactive animations), but gives immediate results that you can see on the screen right away, and it's impossible to create a syntax error.
When you teach a "friendly" programming language like Basic or Python, there's still a decent amount of background material before you actually create something visually cool. So, while a 9 year old might get bored and start to loose attention, I would expect a 13 year old to have the patience and persistence to know that the cool stuff (ie, making a simple video game) is on the horizon. He/She will continue to plow through the boilerplate.
When you go to Java or C, it requires all the more motivation, because the background information is that much more difficult to ignore. Syntax is much trickier. API's are less friendly to new coders. It takes more time and focus to create the result you're looking for, especially if it's graphical.
That was my thought process that eventually led me to choose Scratch as the way to introduce the students to programming in our computer programming club.