Das Problem könnte man so lösen, wobei noch wünschenswert wäre, den Inhalt einer besetzten aber angeforderten (claimed) box in die jeweils folgende (oder nächste freie) Box zu verschieben. Das kann man evntl. durch fortschreitende Zähler und while-Schleifen erreichen. Morgen mehr.
\documentclass[a4paper]{article}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\begin{document}
\setbox0=\hbox{Inhalt0}
\setbox1=\hbox{Inhalt1}
\setbox2=\hbox{Inhalt2}
\setbox3=\hbox{Inhalt3}
\def\claimbox[#1]#2{
\newbox\claimedbox
\chardef\claimedbox=#1
\ifvoid#1 Box #1 ist leer und erhält (#2): \setbox#1=\hbox{#2}\else
Box #1 ist nicht leer und behält (\copy#1): \fi\copy#1}
\claimbox[0]{Inhalt0}
\claimbox[0]{Inhalt0}
\claimbox[1]{Inhalt1}
\claimbox[2]{Inhalt2}
\claimbox[3]{Inhalt3}
\claimbox[4]{Neuen Inhalt 4}
\end{document}