Ciao, così come scritto è un po' incasinato.
Intanto $(document).ready... equivale al DOM ready della pagina. Messo all'interno di una funziona ha poco senso.
Ammesso che tu voglia far sparire il tuo #preloader dopo 3 secondi di caricamento pagina basterebbe fare
codice:
$(window).load(function(){
  $('#preloader').delay(3000).fadeOut();
});
Questo su page load e quindi sul caricamento oltre che del dom anche sulle risorse tipo immagini o quant'altro.
Per caricare al dom ready puoi sostituire con $(function(){.......});