On the one hand, you can limit the number of tasks that is run in parallel by using ParallelOptions.MaxDegreeOfParallelism:
Parallel.ForEach(custList,
new ParallelOptions() { MaxDegreeOfParallelism = 4 },
Process);
If you need the batches for another reason, you can split your customers in groups like this:
var groups = from custWithIndex in items.Select((x, i) => new { Index = i, Customer = x })
group custWithIndex by custWithIndex.Index % 4 into grp
select new { GroupKey = grp.Key, Customers = grp.Select(y => y.Customer)};
On the other hand, calling Parallel.ForEach on the groups is a bit more complicated as in the previous approach, so MaxDegreeOfParallelism should be the better choice if the main goal is to limit the number of tasks that are run in parallel:
Parallel.ForEach(groups, group => {
foreach(var cust in group.Customers)
Process(cust);
});