Figures in margins
I haven't done this for years, but when I did I used the wrapfig package. Something like
\documentclass[twoside]{article}
\usepackage{wrapfig,calc,lipsum}
\newlength{\marginspace}
\setlength{\marginspace}{\marginparwidth+\marginparsep}
\setlength{\wrapoverhang}{\marginspace+\columnsep}
\begin{document}
\lipsum[1]
\begin{wrapfigure}{o}{\marginspace}
\centering
\rule{4em}{4em}
\caption{Black box.}
\label{fig:bb}
\end{wrapfigure}
\lipsum[2]
\end{document}
Full-width figures
This one is easier. Using the changepage package,
\documentclass{article}
\usepackage{changepage,lipsum,calc}
\newenvironment{wide}{%
\strictpagecheck % just in case
\begin{adjustwidth*}{0pt}{-\marginparsep-\marginparwidth}
}{%
\end{adjustwidth*}
}
\begin{document}
\lipsum
\begin{wide}
\lipsum
\end{wide}
\end{document}
Of course, you could also use a command instead of an environment if you prefer.
While the code above is fairly small (in the scheme of things) the floatrow package provides an interface around such elements (and much more).
Update: I don't personally use floatrow, so I don't know if it has its own methods for doing something like this, but here's an example of putting a margin caption beneath a wide figure:
\makeatletter
\newcommand\margincaption[1]{%
\par
\setbox\@tempboxa=\hbox{\parbox{\marginparwidth}{\caption{#1}}}
\@tempdima=\dimexpr\ht\@tempboxa+\dp\@tempboxa\relax
\par\null\hfill\usebox\@tempboxa\par
\vspace*{\dimexpr-\@tempdima-\baselineskip\relax}
}
\makeatother
...
\lipsum[1]
\begin{figure}[tp]
\begin{wide}
\rule{15cm}{1em}
\margincaption{A black long line with lots of explanation so it fills up some space.}
\end{wide}
\end{figure}
\lipsum[2]
\end{document}