Hola:
Los controles con corchetes (para procesar luego con php, tal vez...), deben procesarse con su nombre y sus corchetes entre corchetes (vaya la redundancia...)
<form onsubmit="return validar(this)" ...
function validar(f) {
valida = false;
for (i = 0, datos = f["productos[]"], total = datos.length; i < total; i ++) valida = valida || datos[i].checked;
return valida;
}
Saludos