No, no es correcto.
Aquí declaras un array, esto está bien:
var nombres = new Array();
Pero aquí, al usar prompt(), ahora "var nombres" ha dejado de ser un array.
nombres = prompt('introduce 3 nombres');
Ahora es un string, porque eso es lo que retorna la instrucción prompt().
Por estas cosas soy amante de los lenguajes fuertemente tipados je je.
JavaScript tiene un tipado débil y a la que te despistas, un array pasa a ser un string, un string pasa a ser un dato numérico, un numérico pasa a ser un objeto de clase....
Por otra parte, suponiendo que prompt() hubiera funcionado y te hubiera dado tres nombres para guardar en el array, esos nombres los estarías machacando en las siguientes líneas:
nombres [0] = "";
nombres [1]= "";
nombres [2]= "";
Aquí lo que estás haciendo es colocar cadenas vacías en las tres posiciones del arreglo, así que estarías borrando los nombres, si es que los hubieras conseguido.
Si queremos tres nombres, hay que usar tres prompt().
El string resultante de cada prompt(), lo colocaremos en distintas posiciones del array
Prueba este script:
<script>
var nombres = new Array();
alert('introduce 3 nombres a continuación');
nombres[0] = prompt("Nombre 1:");
nombres[1] = prompt("Nombre 2:");
nombres[2] = prompt("Nombre 3:");
alert("Nombres ingresados: " + nombres);
</script>