It seems that you are right that it blank.lines.skipdoes not apply read.fwf- you have to dig into the code to find out why, but it read.fwfdoes significant processing of the file before transferring it (along with the directive blank.lines.skip) to read.table. However, it is not so difficult to detect and remove all spaces after the fact.
For instance:
cat("abc","def","ghi","","","",sep="\n",file="test3.dat")
read.table("test3.dat") ## blank lines skipped (by default)
(x <- read.fwf("test3.dat",widths=c(1,1,1),blank.lines.skip=TRUE))
## V1 V2 V3
## 1 a b c
## 2 d e f
## 3 g h i
## 4 <NA> <NA> <NA>
## 5 <NA> <NA> <NA>
## 6 <NA> <NA> <NA>
all_NA <- apply(x,1,function(z) all(is.na(z)))
x[!all_NA,]
( , , , , , , , ): colClasses "", , (a) .