SELECT EmployeeID, AVG(DISTINCT Salary) AvgSalary
(SELECT EmployeeID, Salary,
DENSE_RANK() OVER (PARTITION BY EmployeeID ORDER BY Salary DESC) rnk
FROM SalaryHistory) t
WHERE rnk <= 3
GROUP BY EmployeeID ;
Depending on your definition of "top three salaries" you may want to use RANK in place of DENSE_RANK and/or AVG(...) instead of AVG(DISTINCT ...)
That will only work for a single employee, not "each" employee as the poster requested.
If the poster is using SQL Server 2005 or above, dportas' CTE method is the appropriate solution. If using 2000, there are methods utilizing temporary tables or recursive joins which will accomplish the same thing.
If it's not practically useful, then it's practically useless.