Well... it leaves them off but it freezes them as well.... Not sure about use with viewports...
(defun C:layfrzoff( / lay layname laylist)
(setq lay (tblnext "layer" t))
(while lay
(setq layname (cdr (assoc 2 lay)))
(if (<(cdr (assoc 62 (tblsearch "layer" layname))) 0)
(progn
(setq laylist (entget (tblobjname "layer" (cdr (assoc 2 lay)))))
(entmod (subst (cons 70 1) (assoc 70 laylist) laylist))
)
)
(setq lay (tblnext "layer"))
)
)