After a frustrating first-half performance, in which Lucas Paqueta had a goal ruled out by VAR, Gennaro Gattuso's side put Empoli out of sight with two goals in as many minutes.
Piatek got things started in the 49th minute, netting his seventh Milan goal in just his sixth appearance, moments after Rade Krunic wasted a gilt-edged chance at the other end.
And Empoli's misery was immediately compounded by Franck Kessie's delicate chip, with Samu Castillejo's deft finish adding further gloss as Milan moved to within one point of third-placed Inter.
Paqueta thought he had put Milan ahead with a close-range header 10 minutes in, only for VAR to disallow the goal for offside.
Piatek had a penalty claim dismissed soon after, before Castillejo forced Bartlomiej Dragowski into a pair of fine saves.
Krunic struck wide from inside Milan's area following the restart, but Piatek showed no such profligacy when he tucked home from Hakan Calhanoglu's cut-back two minutes later.
Empoli's hopes of a comeback were all-but ended from Milan's next attack, Castillejo threading a neat pass into Kessie, who dinked a sublime finish over Dragowski.
Castillejo turned from provider to scorer with a sharp prod from Andrea Conti's cross, before substitute Fabio Borini had a late effort harshly cancelled out by VAR as Milan prepared for their Coppa Italia semi-final clash with Lazio in confident fashion.
Milan hitting their stride
Milan are really hitting some form under Gattuso and, while their focus will now switch to the Coppa Italia, third place in Serie A is certainly within their grasp. Inter face Fiorentina on Sunday and a slip-up against the Viola could cost Luciano Spalletti's side dear, with the Milan derby also on the horizon.
Empoli, meanwhile, remain three points above the relegation zone.
Piatek matches Bierhoff
It has been a sensational start to life at San Siro for Piatek, who became the first Milan player to score in each of his first four top-flight starts with the Rossoneri since Oliver Bierhoff in 1998.