Poison is fantastic defensively.
Psychic weakness is a bonus weakness, next to Ground, it might as well not exist. Only two weaknesses total.
It has fantastic resists. Fight and Bug resists are fantastic [if Psychic was a bonus weakness, then Grass/Poison resist is a bogus resist], and still overall has more resists than weaknesses.
One KEY thing that everyone ignores when only looking at type chart numbers is that they're completely immune to the Toxic status [bulky Waters would KILL for such a boon] AND they absorb Toxic Spikes.
This is such an AMAZING ability outside OU, especially in Ubers, where hazard stacking is at its best.
Poison in Ubers, and generally throughout the tiers, is held back not by its 'bad typing,' but by its lack of good users. Arceus-Poison has a stupidly high opportunity cost to use, yet still has viability in OU.
Sure, Venusaur, Roserade, Gengar, and Tentacruel are great, but those three effectively hold the type together. Despite its amazing defensive strengths, none of them get a reliable instant recovery move, instead relying on Seed/Rain Dish to maintain any semblance of bulk, and those are the GOOD bulky Pokemon who don't have to rely on Pain Split.
Mind you, the others aren't bad, but with successive gen's power creep, you need to be more than 'not bad' to do well; case and point: Weezing.
Yes. Poison is absolute trash offensively. You can make a strong case for it being THE worst offensive type, but you cannot deny that they're among the best defensive typings in the game, especially complementary to the meta when facing competition from other defensive types like Steel. The added ability of Toxic immunity and absorbing T.Spikes only solidifies Poison's defensive prowess.
That said, Gamefreak is pretty bad at balancing, and despite my defense of Poison, I'm not disagreeing that it's a 'bad' type, relative to others, but it's honestly not that bad.