Всё в принципе верно(кроме "var newblock[i]", но думаю тут просто опечатка, ибо оно просто не стало бы работать).
А так, с помощью фрагмента возможна микрооптимизация:
var fragment = document.createDocumentFragment();
for (var i=0; i<n; i++) {
var newblock = document.createElement('div');
newblock.className = "class";
newblock.innerHTML = "Текст блока [i]";
fragment.appendChild(newblock);
}
parentDiv.insertBefore(fragment, elem);
Если же элементы вообще одинаковые, то тут пригодится клон:
var newblock = document.createElement('div');
newblock.className = "class";
newblock.innerHTML = "Текст блока";
var fragment = document.createDocumentFragment();
while(n--) fragment.appendChild(newblock.cloneNode(true));
parentDiv.insertBefore(fragment, elem);