This code
\documentclass[12pt]{article}
\usepackage[parfill]{parskip}
\usepackage{multicol}
\widowpenalties 2 9999 9999
\begin{document}
\setlength\baselineskip{4ex plus 2ex minus 2ex}
\begin{multicols}{2}
A\hrulefill1\newline
A\hrulefill2\newline
A\hrulefill3\newline
A\hrulefill4\newline\par
B\hrulefill1\newline
B\hrulefill2\newline
B\hrulefill3\newline
B\hrulefill4\newline
B\hrulefill5\newline\par
\end{multicols}
\end{document}
generates this
The automatic choice for the base line skip values looks odd, because the two columns have almost the same vertical size, but not quite.
Is there a way to achieve vertical justification, so that the last line of the first column in the same vertical position as the last line of the second column?
\newline\par
you should never have\\
or\newline
at the end of a paragraph. You are forcing a line whch has no text (and underfull box warnings)