^\s+ で行頭に、\s+$ で行末にそれぞれマッチします。
\s{3,} で3回以上の改行(2行の空白)にマッチし、2回改行に変換します。
コード
$data =<<<_DATA_
a
b
c
d
_DATA_;
$search = array ("'^\s+'","'\s{3,}'","'\s+$'");
$replace = array ("","\n\n","");
$data = preg_replace ($search, $replace, $data);
echo $data;
実行結果
a
b
c
d