I agree with all of Kenshin's posts.
The reason why he doesn't catch too many Pokemon is because the writers want to promote certain marketable Pokemon by giving them to main characters. That's why they always have a starter somewhere on their teams, because they are one of the main selling points of the franchise.
Even though Unova saw him rotating his team for the first time since Kanto it still had the more marketable members get more screentime.
The reason why he always gets a Grass/Fire/Water trio is so he can promote the starters (which I mentioned are the selling point and he catches at least one starter in every region) and in the case if someone other than Ash obtains the starter he catches another Pokemon to fill that void (Corphish and Torkoal in Hoenn, Buizel in Sinnoh). They always make the regional bird serve as his main Flying-type although he has had some non-bird-based Flying-types before (Charizard, Butterfree, Gliscor).
As for why he never catches a Legendary, it's because most of them appear in movies and if he ever caught one it would be too overpowered for him. He has befriended several Legendaries, including Mewtwo, Ho-Oh, Lugia, Latias, Shaymin, Azelf, Giratina, Arceus, Victini, Reshiram, Zekrom and Meloetta. The only time Legendaries would be useful is if he went up against trainers like Brandon and Tobias (aka Trollbias).
On the topic on why he hasn't caught any Psychic, Steel or Ghost-types yet, it could be a result of the writers looking at the Pokemon and they don't see it as a good fit for Ash. There were several droughts before Ash caught a certain type. In Sinnoh, he became the first main character to catch a Dragon-type (Gible) while Unova saw him catch his first Rock-type (Boldore) and also saw him getting the honor of the first main character with a Dark-type (Scraggy and Krokorok).
Ash also won't probably get a Dragon/Flying-type for several reasons. 1) Rayquaza is Legendary, 2) Iris caught Dragonite, 3) Salamence and Altaria were already shown with other recurring characters.
He won't get another Electric-type because of Pikachu. It's his mascot which will never, ever evolve.
And as Dragonomega said, his teams have diversity and he doesn't usually duplicate on certain types. In Unova, he has two Grass-types (Snivy, Leavanny), two Ground-types (Palpitoad, Krokorok), two Dark-types (Scraggy, Krokorok), two Water-types (Oshawott, Palpitoad) and two Fighting-types (Pignite, Scraggy). Although it's a bit redundant, the fact that their movesets are different sets them apart (such as Pignite having an almost all-Fire moveset). I didn't really like that the starters' movesets all consisted of moves of their own type (except Snivy's Attract).