Striker JJ Hooper scored his first senior goal for the club but it was not enough as Vale slumped to a disappointing defeat.
Rob Page named an unchanged side after two wins but Vale got off to a terrible start as the home side roared into the lead after just quarter of an hour through Lee Gregory.
Gregory doubled his tally on 34 minutes and fellow forward Morrison made it three before the break. To be fair, it was all the home side deserved with Vale just not at the races and Millwall totally dominant.
Page made two half-time changes with Kelly and Dodds coming on but the more significant switch was the replacement of Sam Foley with JJ Hooper on 55 minutes.
Hooper scored his first senior goal just six minutes after taking the field and almost doubled his tally minutes later.
However, it was definitely too little too late for the Vale who once again seemed to self-destruct when in range of reaching the play-off places.
Vale: Alnwick, Purkiss, Dickinson, Duffy, McGivern, Moore (Dodds), O’Connor, Brown, Daniel (Kelly), Foley (Hooper), Leitch-Smith
Subs: Neal, Streete, Grant, Yates