EDIT Original version using a newly allocated box register is at the end. This version uses the \footins insertion register to take advantage of the primitive insert capability to pick up the correct notes for each page.

\documentclass[twoside]{article}
\newcounter{f}
\addtolength\textheight{-20\baselineskip}
\def\z{\stepcounter{f}\Roman{f}
\roman{f} \alph{f} \roman{f} \roman{f} \roman{f}
\roman{f} \roman{f} \alph{f} \roman{f} \roman{f}
\roman{f} \roman{f} \roman{f} \alph{f} \roman{f}
\roman{f} \roman{f} \roman{f} \roman{f} \alph{f}}
\def\a{One two three.}
\def\b{\a\ \a\ Four five. \a}
\def\c{\b\ \b\ Red green blue. \b\footnote{\z} \a}
\def\d{\c\ \c\ \c\ \c}
\makeatletter
\skip\footins\z@
\count\footins\z@
\dimen\footins\textheight
\long\def\@footnotetext#1{%
\insert\footins{%
\reset@font\footnotesize
\interlinepenalty\interfootnotelinepenalty
\splitmaxdepth \dp\strutbox \floatingpenalty \@MM
\hsize\marginparwidth \@parboxrestore
\protected@edef\@currentlabel{%
\csname p@footnote\endcsname\@thefnmark
}%
\color@begingroup
\@makefntext{%
\rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
\color@endgroup}}%
\gdef \@makecol {%
\ifvoid\footins
\setbox\@outputbox \box\@cclv
\else
\setbox\@outputbox \vbox {%
\hbox{\color@begingroup
\if@twoside\ifodd\c@page
\box\@cclv\rlap{\kern\marginparsep\vbox to \textheight{\unvbox\footins}}
\else
\llap{\vbox to \textheight{\unvbox\footins}\kern\marginparsep}\box\@cclv
\fi
\color@endgroup}}%
\let\@elt\relax
\xdef\@freelist{\@freelist\@midlist}%
\global \let \@midlist \@empty
\@combinefloats
\ifvbox\@kludgeins
\@makespecialcolbox
\else
\setbox\@outputbox \vbox to\@colht {%
\@texttop
\dimen@ \dp\@outputbox
\unvbox \@outputbox
\vskip -\dimen@
\@textbottom
}%
\fi
\global \maxdepth \@maxdepth
}
\makeatother
\begin{document}
\d\ Nine ten. \d
Five four three two one. \d\ \d
Red blue green. \d\ Yellow blue. \d
\end{document}
I think something like this (updated for twoside) ....

\documentclass[twoside]{article}
\newcounter{f}
\addtolength\textheight{-20\baselineskip}
\def\z{\stepcounter{f}\Roman{f}
\roman{f} \alph{f} \roman{f} \roman{f} \roman{f}
\roman{f} \roman{f} \alph{f} \roman{f} \roman{f}
\roman{f} \roman{f} \roman{f} \alph{f} \roman{f}
\roman{f} \roman{f} \roman{f} \roman{f} \alph{f}}
\def\a{One two three.}
\def\b{\a\ \a\ Four five. \a}
\def\c{\b\ \b\ Red green blue. \b\footnote{\z} \a}
\def\d{\c\ \c\ \c\ \c}
\newbox\ftbox
\setbox\ftbox\vbox{}
\makeatletter
\long\def\@footnotetext#1{%
\global\setbox\ftbox\vbox{%
\unvbox\ftbox
\reset@font\footnotesize
\interlinepenalty\interfootnotelinepenalty
\splitmaxdepth \dp\strutbox \floatingpenalty \@MM
\hsize\marginparwidth \@parboxrestore
\protected@edef\@currentlabel{%
\csname p@footnote\endcsname\@thefnmark
}%
\color@begingroup
\@makefntext{%
\rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
\color@endgroup}}%
\gdef \@makecol {%
\ifvoid\footins
\setbox\@outputbox \box\@cclv
\else
\setbox\@outputbox \vbox {%
\boxmaxdepth \@maxdepth
\unvbox \@cclv
\vskip \skip\footins
\color@begingroup
\normalcolor
\footnoterule
\unvbox \footins
\color@endgroup
}%
\fi
\global\setbox\@ne\vsplit\ftbox to \textheight
\if@twoside\ifodd\c@page
\setbox\@outputbox\vbox{\hbox{\box\@outputbox\rlap{\kern\marginparsep\box\@ne}}}%
\else
\setbox\@outputbox\vbox{\hbox{\llap{\box\@ne\kern\marginparsep}\box\@outputbox}}%
\fi
\else
\setbox\@outputbox\vbox{\hbox{\box\@outputbox\rlap{\kern\marginparsep\box\@ne}}}%
\fi
\let\@elt\relax
\xdef\@freelist{\@freelist\@midlist}%
\global \let \@midlist \@empty
\@combinefloats
\ifvbox\@kludgeins
\@makespecialcolbox
\else
\setbox\@outputbox \vbox to\@colht {%
\@texttop
\dimen@ \dp\@outputbox
\unvbox \@outputbox
\vskip -\dimen@
\@textbottom
}%
\fi
\global \maxdepth \@maxdepth
}
\makeatother
\begin{document}
\d\ Nine ten. \d
Five four three two one. \d\ \d
Red blue green. \d\ Yellow blue. \d
\end{document}
memoir's\sidebarcommands can be adapted to your needs. Seems like a good starting point at least. – jon Sep 05 '12 at 18:47