If we can assume that any line with only 2 fields should have its trailing newline removed, you can do the following in Perl:
$ perl -F"\|" -lane '$#F==1 ? printf : print' file.csv
001|Baker St.London|3|4|7
002|Penny LaneLiverpool|88|5|7
Important Disclaimer: as pointed out in the comments by Stéphane Chazelas, this assumes that your input doesn't contain any % characters since, if it does, those will be taken as the format specifier for printf. This could have unintended consequences ranging from simply printing wrong output to eating loads of RAM, if your input has something silly like %02147483600f%02147483600f%02147483600f%02147483600f.
Explanation
-a : makes perl act like awk, splitting each input line on the character given by -F (so, a | here; which needs to be escaped as \| since | means OR in perl regular expressions) and saving the result as the array @F.
-l : this removes trailing newlines from each input line and adds a 'n t each print call.
-ne : read the input file line by line and apply the script given by -e to each line.
$#F==1 ? printf : print' : The $#F variable is the number of elements in the array @F, so the number of fields. This, therefore, means if the number of fields is 1, then printf (which will print the current line without a newline character since the existing one was removed by -l and printf doesn't add one). If the number of fields is not exactly 1, print the line (which, because of the -l will add a newline).
The same thing can be expanded to:
$ perl -e 'while($line=<STDIN>){
chomp $line;
@fields=split(/\|/,$line);
if(scalar(@fields) == 2){
print "$line";
}
else{
print "$line\n"
}
}' < file.csv
001|Baker St.London|3|4|7
002|Penny LaneLiverpool|88|5|7
And an even shorter version suggested by @Sundeep in the comments:
perl -F'\|' -ape 'chomp if $#F==1'