ci sei quasi

codice:
var markers = new Array();

for (i=0; i < data.marker.length; i++) { 

var marker = etc//

// qui sbagli, gli stai dicendo che per ogni posizione dell'array markers crei un'altro array.. 
// inoltre questa riga è "annullata" dalla successiva perchè la sovrascrivi. 
// Quindi si può eliminare e basta (io te la commento)
// markers[i] = new Array();
markers[i] = marker;
}

//rimettiamo l'id_delete
var id_delete =   //è sempre uguale a [data.marker[i].id_cat];

//elimino array
for (i = 0; i < markers.length; i++ ) {
// adesso in questo ciclo basta controllare se id_delete corrisponde 
// all'id_cat del marker e agire di conseguenza
if(id_delete == markers[i].id_cat)
markers[i].setMap(null);
}
ti consiglio di debuggare il codice che scrivi con qualche browser (io uso chrome ed è tutto molto intuitivo).. in modo da vedere cosa fa il tuo codice, sicuramente riuscirai ad evitare questi errorini