Saw this snippet somewhere and thought it was a good solution:
DECLARE @Year INT
SET @Year =2012
SELECT months,MAX(dates) AS DT_MONTH
FROM (SELECT MONTH(DATEADD(DAY, number-1, DATEADD(YEAR, @Year-1900, 0))) AS MONTHS,
DATEADD(DAY, number-1, DATEADD(YEAR, @Year-1900, 0)) AS DATES
FROM MASTER..spt_values
WHERE type='P'
AND number BETWEEN 1 AND DATEDIFF(DAY, DATEADD(YEAR, @Year-1900, 0), DATEADD(YEAR, @Year-1900+1, 0))) AS T
WHERE DATENAME(WEEKDAY, dates)='Sunday'
GROUP BY months,DATEADD(MONTH, DATEDIFF(MONTH, 0, dates), 0)
Probably covers the 95% of tasks out there.