Hola:
Trataré de explicar lo esencial del script...
Por lo pronto el tema de las validaciones, son correctas si se asocia al submit del form... y lo de pasarle el propio formulario como parámetro es una práctica muy recomendable porque tienes así un código reutilizable entre otras virtudes... y eso se consigue con <form onsubmit="return validar(this)"...
Importantísimo el return, sino no recibirá nada y el formulario se enviará... y eso también debe complementarse con que la validación devuelva valores (importantísimo que sea true/false)... y aún más, se pueden unir más validaciónes asociándolas con el operador AND -Y lógico- (&&)... pero este dato no se cumple en este caso concreto, así que no voy a explayarme...
Bueno... ahora el código:
Inicializamos a false una variable que actualizaremos con la operación OR -Ó lógico- (||) de la misma variable y los datos del formulario que queremos que al menos 1 esté activo (checked)...
Si la variable está false y se hace la operación OR con false el resultado es false y el valor de la variable sigue false; por otro lado si la operación se hace con true, devuelve true, y así queda la variable... y si llegase a operar con más datos false, no cambiaría de valor...
Ahora el bucle:
for (var i = 0, total = f["cid[]"].length; i < total; i ++)
se inicializa con i = 0; i total = la longitud del array... ¿porqué f["cid[]"]...
El nombre es "cid[]" con la pareja de corchetes vacía... si bien en php eso indica que se trata de un array, con javascript solo es el nombre de una variable y es un dato que no podemos referenciar de otra manera (con esos corchetes)... y luego al tratarse de un array la longitud se obtiene con la propiedad length...
Luego valida termina el bucle con false si no ha operado con ningún true (checked) por eso la línea if (!valida)
Por último devolvemos el valor acumulado de valida.
Si no entiendes algo concreto, dilo.
Saludos