Как сделать так, чтобы между блоками разной высоты не было пустого пространства по вертикали?
Сделайте 3 колонки и в них вставляйте эти блоки
Из всего что приходит в голову, наиболее разумное это:
Присвоить блокам display:inline-block,  а потом блокам которые надо подтянуть вверх присваиваем класс и в нем свойство.
margin-top: - xxx px;
То есть у каждого блока который надо подтянуть вверху будет свой класс, со своим значением для свойства margin-top. В общем придется поиграться немного.
float вообще убрать.
P.S. Возможно сюда заглянет гуру и даст более дельный совет=)